import random


# 创建一个类：DoubleBall
class DoubleBall:
    # 	添加静态方法：howToPlay
    # 		参数：无
    # 		返回值：无
    # 		功能描述：
    # 			显示双色球的基本玩法
    # 				双色球投注区分为红色球号码区和蓝色球号码区
    # 				红色球号码区由1-33共三十三个号码组成
    # 				蓝色球号码区由1-16共十六个号码组成
    @staticmethod
    def howToPlay():
        print("""
	============================================================
 			显示双色球的基本玩法
 				双色球投注区分为红色球号码区和蓝色球号码区
 				红色球号码区由1-33共三十三个号码组成
 				蓝色球号码区由1-16共十六个号码组成
	============================================================
		""")

    #
    # 	添加构造方法
    # 		参数：
    # 			tname
    # 		属性：
    # 			name
    # 			红球列表，rlist
    # 			蓝球列表，blist
    # 			投注数：bet
    # 		返回值：无
    # 		功能描述：
    # 			初始化对象属性
    def __init__(self, tname):
        self.name = tname
        self.rlist = []
        self.blist = []
        self.bet = 1

    #
    # 	添加打印方法
    # 		参数：无
    # 		返回值：无
    # 		功能描述：
    # 			显示用户信息：name，投注数
    def __str__(self):
        mstr = """
		玩家信息：
			用户名：{nn}
			投注数：{tt}
			红球号：{rr}
			蓝球号：{bb}
		""".format(
            nn=self.name, tt=self.bet, rr=self.rlist, bb=self.blist)

        return mstr

    #
    # 	添加析构方法：
    # 		参数：无
    # 		返回值：无
    # 		功能描述：
    # 			清空红球列表
    # 			清空蓝球列表
    # 			清空投注数
    def __del__(self):
        print("这里是析构函数")
        self.rlist.clear()
        self.blist.clear()
        self.bet = 1

    #
    # 	添加对象方法，genRedBall
    # 		参数：无
    # 		返回值：无
    # 		功能描述：
    # 			随机产生6个红球号码，
    # 			红球号码范围1~33
    # 			红球号码不能重复
    # 			红球号码保存到对象属性rlist中
    def genRedBall(self):
        # 创建红球号码池
        redballs = [i for i in range(1, 34)]

        # 抽取红球号码（6个）
        tlist = random.sample(redballs, k=6)

        # 保存红球到rlist（对象属性)
        self.rlist.clear()
        self.rlist.extend(tlist)

    #
    # 	添加对象方法，genBlueBall
    # 		参数：无
    # 		返回值：无
    # 		功能描述：
    # 			随机产生1个蓝球号码，
    # 			蓝球号码范围1~16
    # 			蓝球号码保存到对象属性blist中
    def genBlueBall(self):
        # 创建蓝球号码池
        blueballs = [i for i in range(1, 17)]

        # 抽取蓝球号码（1个）
        blueball = random.choice(blueballs)

        # 保存蓝球到blist（对象属性)
        self.blist.clear()
        self.blist.append(blueball)

    #
    # 	添加对象方法，getBet
    # 		参数：无
    # 		返回值：无
    # 		功能描述：
    # 			让用户从终端输入一个数值
    # 			该数值对应的就是投注数
    # 			将投注数保存到对象属性 bet
    def getBet(self):
        bn = input("请输入投注数量：")
        bn = int(bn)

        self.bet = bn

    #
    # 	添加类属性，funcMenu，
    # 		数据类型：列表
    # 		功能描述：
    # 			在列表中添加功能菜单，如下
    # 				产生红球
    # 				产生蓝球
    # 				赌徒下注
    # 				显示信息,调用打印方法
    funcMenu = [
        "机选红球",
        "机选蓝球",
        "赌徒下注",
        "显示信息"
    ]

    #
    # 	添加类方法，showFuncMenu
    # 		参数：无
    # 		返回值：无
    # 		功能描述：
    # 			将功能列表funcMenu显示
    @classmethod
    def showFuncMenu(cls):
        for ind, cont in enumerate(cls.funcMenu, start=1):
            print("""{ii}、{cc}""".format(
                ii=ind,
                cc=cont
            ))

    #
    # 	添加对象方法，show
    # 		参数：无
    # 		返回值：无
    # 		功能描述：
    # 			调用类方法showFuncMenu，显示功能菜单
    # 			让用户输入功能菜单中的编号，执行不同操作
    def show(self):
        while True:
            self.showFuncMenu()

            choice = input("请选择服务：")
            choice = int(choice)

            if choice == 1:
                self.genRedBall()
            elif choice == 2:
                self.genBlueBall()
            elif choice == 3:
                self.getBet()
            elif choice == 4:
                print(self)
            else:
                break


db = DoubleBall("张三")

db.show()

print(db)